[−][src]Crate objekt
This crate provides a Clone
trait that can be used in trait objects, and
a clone_box
function that can clone any sized or dynamically sized
implementation of Clone
. Types that implement the standard library's
std::clone::Clone
trait are automatically usable this way.
Example
ⓘThis code runs with edition 2018
trait MyTrait: objekt::Clone { fn recite(&self); } impl MyTrait for String { fn recite(&self) { println!("{} ♫", self); } } fn main() { let line = "The slithy structs did gyre and gimble the namespace"; // Build a trait object holding a String. // This requires String to implement MyTrait and std::clone::Clone. let x: Box<MyTrait> = Box::new(String::from(line)); x.recite(); // The type of x2 is a Box<MyTrait> cloned from x. let x2 = objekt::clone_box(&*x); x2.recite(); }
This crate includes a macro for concisely implementing impl std::clone::Clone for Box<MyTrait>
in terms of objekt::clone_box
.
ⓘThis code runs with edition 2018
// As before. trait MyTrait: objekt::Clone { /* ... */ } objekt::clone_trait_object!(MyTrait); // Now data structures containing Box<MyTrait> can derive Clone: #[derive(Clone)] struct Container { trait_object: Box<MyTrait>, }
Macros
clone_trait_object | Implement the standard library |
Traits
Clone | This trait is implemented by any type that implements |
Functions
clone | |
clone_box |